/**
 * 时间格式化工具函数
 */

// 将日期格式化为字符串，格式：YYYY-MM-DD HH:mm
const formatTime = date => {
  if (typeof date === 'string' || typeof date === 'number') {
    date = new Date(date);
  }
  
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}

// 将日期格式化为友好展示字符串
const formatTimeToFriendly = date => {
  if (!date) return '';
  
  if (typeof date === 'string') {
    date = new Date(date);
  }
  
  const now = new Date();
  const diff = now - date;
  
  // 小于1分钟，显示"刚刚"
  if (diff < 60 * 1000) {
    return '刚刚';
  }
  
  // 小于1小时，显示"xx分钟前"
  if (diff < 60 * 60 * 1000) {
    return Math.floor(diff / (60 * 1000)) + '分钟前';
  }
  
  // 小于24小时，显示"xx小时前"
  if (diff < 24 * 60 * 60 * 1000) {
    return Math.floor(diff / (60 * 60 * 1000)) + '小时前';
  }
  
  // 小于30天，显示"xx天前"
  if (diff < 30 * 24 * 60 * 60 * 1000) {
    return Math.floor(diff / (24 * 60 * 60 * 1000)) + '天前';
  }
  
  // 大于30天，显示具体日期
  return formatTime(date);
}

// 将数字格式化为两位数
const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : `0${n}`
}

// 处理图片URL，防止加载失败或403错误
const formatImageUrl = url => {
  if (!url) {
    return '/assets/images/banner1.jpg'; // 默认图片
  }
  
  // 如果是云存储路径，确保格式正确
  if (url.startsWith('cloud://')) {
    // 已经是完整云存储路径，直接返回
    return url;
  }
  
  // 如果是相对路径，确保以/开头
  if (!url.startsWith('/') && !url.startsWith('http')) {
    return '/' + url;
  }
  
  // 如果是外部链接且来自img.zcool.cn（存在防盗链问题）
  if (url.includes('img.zcool.cn')) {
    // 替换为默认图片
    return '/assets/images/banner1.jpg';
  }
  
  // 其他情况直接返回
  return url;
}

module.exports = {
  formatTime,
  formatTimeToFriendly,
  formatImageUrl
}
